In integrated circuits, one requirement is for memory that contains “code” for a processor element. This memory can be read-only memory (ROM), random access memory (RAM), electrically erasable random access memory (EERAM), or other (generally larger) memory structures. ROM retains its memory after power-down since it is built during the IC build process. ROM cannot be changed after manufacture of the IC. EERAM can retain its information after power-down and usually takes a dedicated write sequence to change information within the EERAM. RAM cannot retain the information contained within it after power is removed from the IC. Thus, RAM must be loaded from another memory source at power-up.
The size of the memory is an important factor in the selection of the type of memory used. ROM is the smallest area for a given number of memory locations, followed by RAM and then EERAM and other (generally larger) memory structures. The ideal memory for processor code use is the ROM, except for the fact that one cannot change the information within the ROM after manufacture.
The processor code or software dictates the processor operation for the function used within the integrated circuit. Although design methodology flows are similar for hardware and software designs, software suffers from a much larger correct verification space. Thus, software code can sometimes contain errors at the time of production of the integrated circuit. This means that any code produced in ROM in a production IC may be “imperfect” but the use of ROM dictates “perfect” code.
Other solutions include the use EERAM and RAM (loaded from an off-chip memory) and other (generally larger) memory structures. These solutions allow the designer to change processor code after manufacture. Both of these solutions end up costing a much larger chip or board cost than the use of ROM memory.
One hybrid solution is to combine ROM with RAM. This hybrid solution has the ROM code branch or go check the RAM memory for a flag or new code. These checks are interspersed throughout the ROM code with sections that are containable in the amount of RAM available. An example of this is a branch to RAM jump table every 4K of Code. If an error is found in a particular block of ROM code, that section would contain a real jump to the new code in RAM and would bypass the code on the ROM. The problem with this hybrid solution is that the number of errors must be guessed at before hand during system design. The designer of the IC must determine how much RAM must be made available at the time of manufacture.
A second problem of this hybrid approach is that small errors still require the entire block to be replaced, which means that several small errors could require the entire ROM to need to be substituted by the RAM. If the replacement blocks are smaller, then more checking time as opposed to operating time is required These are just not practical.
The problem is how to replace random errors in ROM with a minimum of extra resources.